/*
实验3-2 出栈序列的合法性
分数 25
作者 陈越
单位 浙江大学

给定一个最大容量为 m 的堆栈，将 n 个数字按 1, 2, 3, ..., n 的顺序入栈，允许按任何顺序出栈，则哪些数字序列是不可能得到的？例如给定 m=5、n=7，则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }，但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。
输入格式：

输入第一行给出 3 个不超过 1000 的正整数：m（堆栈最大容量）、n（入栈元素个数）、k（待检查的出栈序列个数）。最后 k 行，每行给出 n 个数字的出栈序列。所有同行数字以空格间隔。
输出格式：

对每一行出栈序列，如果其的确是有可能得到的合法序列，就在一行中输出YES，否则输出NO。
输入样例：

5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2

输出样例：

YES
NO
NO
YES
NO
*/

#include <iostream>
#include <vector>

using namespace std;

/*
出栈的顺序遵循着一个规律: 对于数据中第i个数来说，其后的数比它小的必须以递减顺序排列。
对于数据中第i个数来说，其后及其比它小的数的个数，要小于栈的容量
*/
bool check(const vector<int> &v, int m) {
    vector<int> st;
    int i = 1;
    for (int j = 0; j < v.size(); j++) {
        while (st.size() < m && (st.empty() || st.back() != v[j])) {
            st.push_back(i++);
        }
        if (st.empty() || st.back() != v[j]) {
            return false;
        }
        st.pop_back();
    }
    return true;
}

int main() {
    int m, n, k;
    cin >> m >> n >> k;
    for (int i = 0; i < k; i++) {
        vector<int> v(n);
        for (int j = 0; j < n; j++) {
            cin >> v[j];
        }
        if (check(v, m)) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}